package com.easy.util;

import lombok.Data;

/**
 * 统一响应结果类
 * 规范接口返回格式：{code: 状态码, msg: 提示信息, data: 数据}
 */
@Data
public class Result {
    // 状态码：200成功，500系统错误，400参数错误，401未授权，403权限不足
    private int code;
    // 提示信息
    private String msg;
    // 响应数据
    private Object data;

    // ===================== 成功响应（默认状态码200） =====================
    /**
     * 成功响应（无数据，无消息）
     */
    public static Result success() {
        return new Result(200, "操作成功", null);
    }

    /**
     * 成功响应（带数据，无消息）
     */
    public static Result success(Object data) {
        return new Result(200, "操作成功", data);
    }

    /**
     * 成功响应（带数据和自定义消息）
     */
    public static Result success(String msg, Object data) {
        return new Result(200, msg, data);
    }

    // ===================== 失败响应（常用错误类型） =====================
    /**
     * 系统错误（默认消息）
     */
    public static Result error() {
        return new Result(500, "系统异常，请稍后重试", null);
    }

    /**
     * 自定义错误消息（默认状态码500）
     */
    public static Result error(String msg) {
        return new Result(500, msg, null);
    }

    /**
     * 参数错误（状态码400）
     */
    public static Result paramError(String msg) {
        return new Result(400, msg, null);
    }

    /**
     * 未授权（状态码401，如未登录）
     */
    public static Result unauth(String msg) {
        return new Result(401, msg, null);
    }

    /**
     * 权限不足（状态码403，如普通用户访问管理员接口）
     */
    public static Result forbidden(String msg) {
        return new Result(403, msg, null);
    }

    /**
     * 自定义状态码和消息（灵活扩展）
     */
    public static Result fail(int code, String msg) {
        return new Result(code, msg, null);
    }

    /**
     * 自定义完整响应（包含数据）
     */
    public static Result fail(int code, String msg, Object data) {
        return new Result(code, msg, data);
    }

    // 构造方法
    public Result(int code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

//    public Result() {
//    }
//
//    // getter和setter
//    public int getCode() {
//        return code;
//    }
//
//    public void setCode(int code) {
//        this.code = code;
//    }
//
//    public String getMsg() {
//        return msg;
//    }
//
//    public void setMsg(String msg) {
//        this.msg = msg;
//    }
//
//    public Object getData() {
//        return data;
//    }
//
//    public void setData(Object data) {
//        this.data = data;
//    }
}